[perl] problem z połączeniem z niektórymi serwerami Jabbera

Mirosław Zalewski miniopl w gmail.com
Sob, 19 Lut 2011, 18:38:44 CET


Witam

Osobiście używam Debiana, jednak po znajomości otrzymałem trochę
miejsca na serwerze na którym jest zainstalowany PLD x86_64. Właśnie
tego serwera dotyczy mój problem.

Opis problemu w wersji skróconej:
próba wysłania wiadomości przy pomocy sendxmpp korzystając z konta na
serwerze uaznia.net lub jabster.pl (prawdopodobnie również innych)
kończy się niepowodzeniem. Próba wysłania wiadomości z konta na
serwerze chrome.pl przechodzi bez problemów. Na Debianie testowym
próba wysłania wiadomości z dowolnego z tych kont kończy się
powodzeniem. Dlaczego na PLD nie działa i co zrobić żeby działało?

Opis problemu w wersji rozbudowanej:
Na wspomnianym serwerze mam skrypt w perl-u, który ma za zadanie
połączyć się z kontem jabberowym, pobrać roster, znaleźć kontakty z
transportu GG i na ich podstawie utworzyć listę kontaktów dla GG.
Skrypt można znaleźć pod adresem:
https://minio.komunikatory.pl/jab2gg/jab2gg.pl
Niestety, skrypt nie potrafi połączyć się z niektórymi serwerami
Jabbera (sprawdzałem uaznia.net i jabster.pl). Pojawia się błąd
"not-authorized". Zgodnie ze specyfikacją XMPP (RFC 3920) błąd ten
powinien pojawić się, gdy klient zacznie wysyłać strumień XML przed
zakończeniem negocjacji SASL. Powiedziałbym że to błąd w skrypcie,
gdyby nie to że:
- skrypt potrafi połączyć się np. z serwerem chrome.pl
- skrypt doskonale działa na moim Debianie (łączy się z uaznia.net
albo jabster.pl)

W skrypcie używam pakietu Net::XMPP. Logi produkowane przez ten moduł:
- na serwerze (PLD): http://wklej.fluxboxpl.org/18605
- u mnie (Debian testing): http://wklej.fluxboxpl.org/18606

Na PLD procedura SASL rozpoczyna się od 105 linii. Klient chce wysłać
sumę kontrolną MD5, jednak sprawdzenie to się nie powodzi i serwer
zrywa połączenie. Na Debianie procedura SASL rozpoczyna się od 107
linii. Klient wysyła hasło w czystym tekście i udaje mu się
uwierzytelnić.
Rozumiem więc na czym ten błąd (?) polega, jednak nie rozumiem skąd
się wziął, przez co nie potrafię sobie z nim poradzić. Wygląda to tak,
jakby na Debianie "po prostu" działało a na PLD "po prostu" nie
działało.

Na PLD są zainstalowane następujące pakiety związane z perl-em:
perl-Authen-SASL-2.13-1.noarch
perl-base-5.12.2-1.x86_64
perl-Date-Manip-6.14-1.noarch
perl-Digest-HMAC-1.01-12.noarch
perl-Digest-SHA1-2.12-2.x86_64
perl-dirs-4-1 w 5.12.0.x86_64
perl-Encode-2.39-2.x86_64
perl-GSSAPI-0.28-2.x86_64
perl-HTML-Parser-3.68-1.x86_64
perl-HTML-Tagset-3.20-1.noarch
perl-IO-Socket-SSL-1.31-1.noarch
perl-libs-5.12.2-1.x86_64
perl-libwww-5.837-1.noarch
perl-Mail-IMAPClient-3.21-1.noarch
perl-modules-5.12.2-1.x86_64
perl-Net-SSLeay-1.36-2.x86_64
perl-Net-XMPP-1.02-1.noarch
perl-Parse-RecDescent-1.965001-1.noarch
perl-Term-ReadKey-2.30-6.x86_64
perl-URI-1.56-1.noarch
perl-WWW-Curl-4.13-2.x86_64
perl-XML-Parser-2.36-6.x86_64
perl-XML-Simple-2.18-2.noarch
perl-XML-Stream-1.22-3.noarch
perl-YAML-Syck-1.07-2.x86_64

U mnie na Debianie są zainstalowane następujące pakiety (wliczając
tylko te wymagane do połączenia z serwerem XMPP):
perl - 5.10.1-17
libnet-xmpp-perl - 1.02-1
libxml-stream-perl - 1.23-1
libdigest-sha1-perl - 2.13-1
libauthen-sasl-perl - 2.1500-1
libio-socket-ssl-perl - 1.38-1
libnet-ssleay-perl - 1.36-1

Jak widać, wersje pakietów się różnią (generalnie w PLD są starsze
wersje). Niestety najwyraźniej nie ma to wpływu, ponieważ w akcie
desperacji zainstalowałem u siebie na Debianie powyższe pakiety w
dokładnie takich samych wersjach jak są na PLD - nic to nie pomogło,
ponieważ na Debianie nadal błąd nie chciał wystąpić.

Mogłoby być tak, że na wersje w Debianie zostały nałożone jakieś łatki
które powodują, że skrypt działa. Mogłoby, ale jeśli już na powyższe
pakiety są nałożone jakieś łatki, to wprowadzają znikome zmiany - w
Authen::SASL poprawione są literówki w dokumentacji, w XML::Stream
dodany jeden warunek (nic nie zmienia w mojej kwestii - zainstalowałem
wersję sprzed naniesienia tej poprawki i skrypt u mnie nadal działa).

Szczerze mówiąc, czuję że wyczerpałem swoje możliwości
zidentyfikowania źródła tego błędu i poradzenia sobie z nim. Nie wiem
dlaczego na PLD ten skrypt nie chce działać a na Debianie działa.

Aby uzyskać ten błąd u siebie, należy:
- pobrać źródła skryptu: http://minio.komunikatory.pl/jab2gg/jab2gg-1.1.tar.gz
- rozpakować i uruchomić program: ./jab2gg-cli.pl -c username:haslo w serwer

Alternatywnie można zainstalować pakiet sendxmpp i skorzystać z niego
(mój skrypt i sendxmpp korzystają z modułu Net::XMPP).

Błąd na pewno występuje przy próbie połączenia z serwerami uaznia.net
oraz jabster.pl. Nie występuje przy próbie połączenia z serwerem
chrome.pl. Żadnych innych nie testowałem.

Mam nadzieję że może któryś z czytelników tej listy będzie w stanie
pomóc mi w zidentyfikowaniu źródła problemu i nakieruje mnie na sposób
jego usunięcia.

Pozdrawiam
Mirosław Zalewski


Więcej informacji o liście pld-users-pl